package com.example.springboot.controller;

import cn.hutool.core.io.FileUtil;
import cn.hutool.http.server.HttpServerRequest;
import com.example.springboot.common.AuthAccess;
import com.example.springboot.common.Result;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * 功能： 文件操作相关接口
 * 作者：陈雷
 * 日期：2024/10/25 20:42
 */
@CrossOrigin
@RestController
@RequestMapping("/file")
public class FileController {

//    写一个静态变量，存储文件上传的路径
    private static final String ROOT_PATH = System.getProperty("user.dir") + File.separator + "file";

    @Value("${ip}")
    String ip;
    @Value("${server.port}")
    String port;

//    上传接口

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
        String originalFilename = file.getOriginalFilename();  //获取文件的原始名称getOriginalFilename方法
        String mainName = FileUtil.mainName(originalFilename);  //获取文件名主要名称不带后缀FileUtil.mainName方法
        String extName = FileUtil.extName(originalFilename);  //获取文件的后缀名

        if (!FileUtil.exist(ROOT_PATH)){
            FileUtil.mkdir(ROOT_PATH); //如果父级目录不存在就创建
        }
        if (FileUtil.exist(ROOT_PATH +File.separator+ originalFilename)){ //如果当前路径存在文件就添加一个随机数
            originalFilename = mainName + System.currentTimeMillis() + "." + extName;
        }
        File saveFile = new File(ROOT_PATH +File.separator+ originalFilename);
        file.transferTo(saveFile);
        String url = "http://" + ip + ":" + port + "/file/download/" + originalFilename;
        return Result.success(url);   //返回文件的链接，这个链接就是文件的下载地址，这个下载地址就是后台提供的
    }



    @AuthAccess
//    下载接口
    @GetMapping("/download/{fileName}")
    public void download(@PathVariable String fileName , HttpServletResponse response) throws IOException {
        String FilePath = ROOT_PATH + File.separator + fileName;
        if (!FileUtil.exist(FilePath)){
            return;
        }
        byte[] bytes = FileUtil.readBytes(FilePath);
        ServletOutputStream outputStream = response.getOutputStream();
        outputStream.write(bytes);   //数组是一个字节数组，返回文件的字节流数组
        outputStream.flush();  //清空
        outputStream.close();  //关闭
    }


}